Tomohiro Abe

python
plot(2d)
plot(contour)

plot2d with python

preparation

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.backends.backend_pdf import PdfPages
import matplotlib.ticker as ticker
from matplotlib.ticker import MultipleLocator, FormatStrFormatter

データの読み込み

ファイルを読むとき、空行は無視されるらしい。
plotdir = ""
file_id='M1_1000_tanB30_quarkEDM.dat'
rfile = plotdir + file_id
data = np.loadtxt(rfile, comments='#')
ここで、# で始まる行は無視するように、 comments='#' としている。
data に行列っぽく値が格納される。5列目、6列目、7列目の値を使うときは次のようにする。
X = data[:,4] # 5列目のデータを取得。:は全範囲の意味。配列の番号は 0 から始まることに注意。
Y = data[:,5]
Z = data[:,6]
こうすると、例えば、
X=[-180,-180,...,-180,-170,...,-170,-160,.......,...., 180]
Y=[-10, -9, -8, ..., 9, 10,-10,-9,...]
などとなる。gnuplotで使うことを念頭に作ったファイルならこうなる。

gnuplot でいうところの plot "< awk '$5==-170' data.dat" u 6:7 をしたいとき。
以下のようにすれば X = -170 のところだけとってくる。
aaa=np.where(X==-170.)
start=aaa[0][0]
goal=aaa[0][-1]

X=X[start:goal+1]
Y=Y[start:goal+1]
Z=Z[start:goal+1]

plot

コマンドがたくさんある。
plt.figure(figsize=(8,5))
plt.xlabel('Arg($\mu$)')
plt.ylabel('y-axis')
plt.gca().set_aspect('equal') 
plt.title( r"$d_n$ [e cm] (positive $GG\tilde{G}$)", fontsize=14)
plt.xticks([-180,-90,0,90,180])
plt.yticks([-180,-90,0,90,180])
plt.axes().xaxis.set_minor_locator(MultipleLocator(10))
plt.axes().yaxis.set_minor_locator(MultipleLocator(10))
plt.plot(Y,Z)
plt.savefig('hoge.pdf', bbox_inches="tight")
plt.close()
log plot は
plt.semilogy(Y,Z)
plt.semilogx(Y,Z)
plt.loglog(Y,Z)
出来上がったpdfファイルの余白をもっと小さくするなら以下をつかう。ただし、軸が見切れるときがある。
plt.savefig('hoge.pdf', bbox_inches="tight", pad_inches=0.0)